import {
	defineStore
} from 'pinia'
import app from './app.js';

const url='wss://www.newmont8.com/wss'
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}
import ticker from './ticker.js';
const useSocketStore = defineStore({
			id: 'socket', // id必填，且需要唯一
			state: () => {
				return {
					name: '张三',
					socketTask: '',
					Time: null,
					XTime: null,
					meClose: false,
				}
			},
			actions: {

				socket() {
					// 我这个项目需要在连接的时候带token，不需要可以只写url地址
					// token = uni.getStorageSync("token") //token
					// console.log(url + token);
					//判断是否有websocet对象，有的话清空
					
					if (this.socketTask) {
						
						uni.closeSocket()
						this.socketTask = null;
					}
					
					// 进行连接
					this.socketTask = uni.connectSocket({
						url: url, //仅为示例，并非真实接口地址。不需要带token可以只写url地址
						success:(data)=>  {
							clearInterval(this.Time) //关闭定时器
							clearInterval(this.XTime) //关闭心跳定时器
							console.log("创建连接!");
						
							
						},
						fail(err) {
							console.log("失败!",err);
						}
					});
				
				
				},
				initEvent(){
					console.log('======================invent')
					uni.onSocketOpen((res) => {
							let  tickerStore =ticker();
							let appstore=app()
							console.log('连接成功发送消息')
						clearInterval(this.Time) //关闭定时器
						clearInterval(this.XTime) //关闭心跳定时器
						// 5秒发送一次心跳//后端检测是否在线
						this.sendMsg({pong:parseInt(Date.now()/1000)})
						// this.sendMsg({forex:appstore.forex.title})
						this.sendMsg({code:tickerStore.nowCode}) 
						// this.sendMsg({forex})
						// this.XTime = setInterval(() => {
						// 	// console.log("心跳");
							
						// }, 60000)
					});
					console.log('even========')
					uni.onSocketError( async (err) => {
						console.log('连接失败，请检查');
						
						if (!this.meClose) { //判断是否主动关闭进行重新连接	debugger;
							await sleep(3000)
								this.reconnect()
						
						
						}
					})
					// 监听连接关闭close
					uni.onSocketClose((e) => {
						console.log('连接关闭！', this.meClose);
						if (!this.meClose) { //判断是否主动关闭进行重新连接
							this.reconnect()
						}
					})
					// 监听收到信息
					uni.onSocketMessage((res) => {
						let data = JSON.parse(res.data)
						// 接收数据后回调
						// console.log('服务器内容:', data);
						if(data.ping){
							console.log('pong');
							this.sendMsg({pong:parseInt(Date.now()/1000)})
						}
						if(data.sub){
							this.formatter(data)
						}
						
					
					});
				},
				// 重新连接
				reconnect() {
					console.log("开始断线重连！！！！！！！！！！！");
					// 确保已经关闭后再重新打开
					uni.closeSocket()
					this.socketTask = '';
					console.log("重新连接中...");
					// console.log(url + token);
					this.socket(url)
				},
				formatter(a){
					const tickerStore =ticker();
					const subarr=a.sub.split('.')
					if(subarr[0]==='market'){
					a.data.isup=parseFloat(a.data.ratio)>0?true:false
					
					tickerStore.setTiker({key:subarr[1],obj:a.data})
					return 
					}
					// if(subarr[2]==='zhishu'){
					
					// tickerStore.setzhishu(a.data)
					// return 
					// }
					// if(subarr[2]==='zhibiao'){
					
					// tickerStore.setZhibiao(a.data,subarr[1])
					// return 
					// }
					// if(subarr[2]==='trade'){
					
					// tickerStore.setTrade(a.data,subarr[1])
					// return 
					// }
					if(subarr[0]==='kline'){
					
					tickerStore.setKline(a.data,subarr[2],subarr[3])
					return 
					}
					
				},
				//向后端发送信息
				sendMsg(msg) {
					msg = JSON.stringify(msg)
					// console.log(msg);
					//通过 WebSocket 连接发送数据
					uni.sendSocketMessage({
						data: msg,
						success:()=> {
							// console.log("成功");
						},
						fail:()=> {
							console.log("失败");
							uni.showLoading({
								title: "加载中..."
							})
							setTimeout(() => {
								uni.hideLoading()
							}, 1000)
							if (!this.meClose) {
								// this.reconnect()
							}
						},
					});
				},
				// 手动关闭连接
				stop() {
					// 主动关闭连接
					this.meClose = true
					uni.closeSocket({
						success:()=> {
							console.log("手动关闭成功！");
							clearInterval(this.Time) //关闭定时器
							clearInterval(this.XTime) //关闭心跳定时器
							// 确保已经关闭
							this.socketTask = null;
						}
					})
				},
				}
			})
 export default useSocketStore;